# -*- coding: utf-8 -*-
"""
Created on Mon Apr 20 16:37:19 2015

@author: hc
"""
'''
Python天天美味(9) - translator 





1.string.maketrans设置字符串转换规则表(translation table)

allchars = string.maketrans('', '')#所有的字符串，即不替换字符串
aTob = string.maketrans('a','b')#将字符a转换为字符b


2.translate函数进行字符串的替换和删除，第一个参数是字符串转换规则表(translation table)，第二个参数是要删除的字符串。比如，要将字符串s中的所有e替换为a，同时要删除所有的o

aTob = string.maketrans('e','a')
s = 'hello python'
print s.translate(aTob, 'o')

输出结果：
hall pythn
'''
'''
3.假如我们这样使用

allchars = string.maketrans('', '')
k = allchars.translate(allchars, 'a')
allchars表示所有的字符串，而k表示从所有的字符串中去除掉字符a，就是说所有的字符，除了a，因此，我们再调用如下方法时：

s = 'abc'
print s.translate(allchars, k)
字面意思是，输出“字符串s中除去任何不是字符a的字符",即，只输出字符a，因此输出结果为：
a

4.现在，已经不难理解下面这个函数了
'''
import string
def translator(frm='', to='', delete='', keep=None):
    if len(to) == 1:
        to = to * len(frm)
    trans = string.maketrans(frm, to)
    if keep is not None:
        allchars = string.maketrans('', '')
        delete = allchars.translate(allchars, keep.translate(allchars, delete))
    def translate(s):
        return s.translate(trans, delete)
    return translate
#调用：

digits_only = translator(keep=string.digits)
print digits_only('Chris Perkins : 224-7992')

digits_to_hash = translator(frm=string.digits, to='#')
print digits_to_hash('Chris Perkins : 224-7992')